package com.enlorenz.core.engine;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.enlorenz.common.util.ExceptionUtils;

/**
 * 业务处理抽象类
 * @author Karma
 */
public abstract class AbstractBuzHandler implements IBuzHandler{
	//线程开始时间
	protected Date threadStartDate;
	//线程结束时间
	protected Date threadEndDate;
	protected Logger logger=LoggerFactory.getLogger(this.getClass());
	
	/**
	 * 线程开始必须做的
	 * @throws Exception
	 */
	protected void doWhenStart() throws Exception{
		initDate();
	}
	
	/**
	 * 初始化时间
	 */
	protected void initDate(){
		threadStartDate=new Date();
		threadEndDate=null;
	}
	
	/**
	 * 当逻辑结束的时候
	 */
	protected void doWhenEnd() {
		threadEndDate=new Date();
	}
	
	/**
	 * 处理业务
	 */
	public void handle() {
		try {
			// 一开始必须做的
			doWhenStart();
			//业务实现
			buzHandleImp();
			//结束必须做的
			doWhenEnd();
		} catch (Exception e) {
			try {
				logger.error(ExceptionUtils.getExpStr(e));
			} catch (Exception exx) {
				exx.printStackTrace();
			}
			// 当异常发生的时候
			try {
				onExceptionHappened(e);
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		} finally {
			try {
				// 一个循环完成始终要做的
				onFinallyDo();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	

	

	/**
	 * 处理业务
	 * @throws Exception
	 */
	protected abstract void buzHandleImp() throws Exception;
	
	/**
	 * 发生异常后
	 * @param e
	 */
	protected void onExceptionHappened(Exception e){
		
	}
	
	/**
	 * 一个循环完成始终要做的
	 * @param e
	 */
	protected void onFinallyDo(){
		
	}
	
	
}
